package com.flying.oop.classmember.block;


/**
 * @ClassName: BlockDemo
 * @author: flying
 * @date   2024/12/11 08:24
 * @Description:  代码块的使用
 *
 * 代码块分为
 *  1. 普通代码块，方法里的代码，if/for语句代码块
 *  2. 静态代码块，写在类里方法外的，使用 static {} 包裹的代码块
 *      静态代码块用来对类进行初始化，类只会被加载一次
 *      类什么情况下被加载
 *      a.使用类创建对象
 *      b.访问类里的静态变量货这调用静态方法都会让类初始化，方式访问静态常亮不会导致类的初始化
 *      c.运行main方法所在的类
 *      d.子类创建对象是，父类也会初始化
 *      类初始化是会调用 <clinit>方法
 *   3. 构造代码块，写在类里方法外，使用{}表示的代码
 *      构造代码块用来对所有的实力对象进行统一的初始化
 *   4. 同步代码块
 *
 *
 */public class BlockDemo {

    static {
        System.out.println("BlockDemo类被初始化了");
    }
    public static void main(String[] args) {
        /**
         * 创建对象
         * 1.初始化类 (从上到下一次执行)
         *      初始化静态变量/执行静态代码块
         *
         */
//        Student student = new Student();

//        System.out.println(Student.x);  zhi



        /*
        BlockDemo类被初始化了
        Student类初始化了
        m = yes
        对象初始化了
        有参构造方法被调用了
        */
        Student student = new Student(11);
    }
}
